Dual-Mode是OS的一種設計。平時OS就是在掌控我們電腦裡面的殺生大權,要是哪天惹OS不開心,他把我的D巢(對我故意打這個巢),還有那些見不得人的東西發出去,或是把它銷毀,是不是令人冷汗的一件事呢(XXX
作業系統不是誰都可以亂動的(就像身體依樣,每個人都要保護好自己)
為了防止OS被惡意或寫壞的程式所gank,OS採Dual-Mode的安全機制,白話說就是:「安全的操作可以由使用者操作,但對於危險的操作只能由 OS 核心來做」。Dual-Mode可以分為:
雙模式(Dual-Mode)最主要的核心是「只有作業系統可以從 User Mode 進入 Kernel Mode,且必須透過中斷機制或系統呼叫」。至於兩種模式之間的切換,大概有這幾種:
接下來剩下一些小知識,雖然會有點突兀,但這邊就把它應塞進來XD
在OS當中,並不是每一樣程序燈可以如期完成,程序可能會有
在這樣的前提下,OS就有Timer。負責定時中斷,強迫程式交出 CPU 控制權,目的是避免程式無限迴圈或長時間佔用 CPU。
Timer就像是在提想你,不要強求,給自己留些處理空間。讓你有機會切換到更值得的過程。
電腦開機時,會執行bootstrap program(啟動程式),bootstrap program裡面儲存著firmware,主要負責初始化 CPU、記憶體與裝置控制器,然後載入kernel。kernel執行後,會載入系統程式(稱為 daemon,常駐程式),例如Linux 中第一個系統程式是 systemd。系統完成開機後,就等待「事件」(例如:鍵盤輸入、網路請求)。
總之,這邊一共會有兩個重點。第一個重點是電腦開機後的bootstrap program。bootstrap program包含:
然後由 Kernel 正式接手,開始管理整台系統。而當 Kernel 成功載入後,它會開始做:
當我們寫好一支程式後,(例如 main.c)你不能直接執行它。它必須經過以下流程:
第一,編譯器(Compiler):負責將 .c 原始程式碼編譯成 物件檔(Object File),也就是 .o 檔案。這個階段只處理單一原始檔,還不能執行。
第二,連結器(Linker):將多個物件檔和函式庫合併成最終的 可執行檔(Executable File),也就是 .exe(Windows)或無副檔名的執行檔(Linux)。連結器有兩種方式:
第三,載入器(Loader):作業系統的元件,負責將程式載入記憶體、配置資源,準備執行。此階段會進行:
那那那,我再把I/O Systems的東西,再這邊多做個補充,快寫完了(((
其實鍵盤,滑鼠,喇叭這類電腦周邊裝智是超級難搞的。因為每個周邊裝置都有自己對應的操作功能跟需求。但總不能叫每個開發者都懂每個裝置的通訊協定吧。因此這邊提出的解法是,OS扮演「中介」的角色。統一管理五花八門的裝置,讓開發者可以統一用read()、write() 這種簡單方法就搞定。
當前在I/O技術的兩大趨勢(彼此衝突,但也並存):
而OS的挑戰就在於:在統一的管理架構中處理日益複雜的多樣裝置。OS會透過一些實體路線傳訊號跟I/O傳輸,例如:
而為了讓CPU跟I/O5裝置交互更方便,有一種設計較Memory-Mapped I/O,也就是把裝置「偽裝成」記憶體的一部分。舉例來說:
透過這樣的方式,CPU 就可以用一般 mov 或 ld/st 指令來控制裝置,不需要額外的 I/O 指令集。
耶~~這個章節結束了,明天就可以進到新的章節:Process搂